from lxml import etree

with open('test.html', 'r', encoding='utf-8') as f:
    html = f.read()

# print(html)

# 对获取到的html文档使用 etree.HTML 进行解析，使其变成 Element对象
text = etree.HTML(html)

# 得到Element对象之后，就可以使用xpath方法进行解析了

# 情况一：假如获取不存在的内容
h2_list = text.xpath('//h2')  # 查找h2
print(h2_list)  # [] 说明如果查找的元素不存在，不会报错，而且会返回一个空列表

# 情况二：获取属性值或者文本内容
# 获取有序列表中每个li标签的文本
ol_li_texts = text.xpath('//ol/li/text()')
print(ol_li_texts)  # ['有序标签的子元素', '有序标签的子元素', '有序标签的子元素']
# 获取两张图片的src地址
img_srcs = text.xpath('//img/@src')
print(img_srcs)  # ['./kanna.jpg', './yui.jpg']

# 情况三：获取的列表中都是element标签
# 获取无序列表中的所有li标签
ul_lis = text.xpath('//ul/li')
# [<Element li at 0x2307cf43c40>, <Element li at 0x2307cf43cc0>, <Element li at 0x2307cf43d00>]
print(ul_lis)

for ele in ul_lis:
    # 对每个元素使用xpath
    # 提取出每个li标签中的子节点的文本
    li_texts = ele.xpath('.//text()')
    print(li_texts)
    '''
        ['无序标签的子元素 ', '花海']
        ['无序标签的子元素 ', '童话']
        ['无序标签的子元素 ', '沧海一声笑']
    '''

    # 只获取子节点的文本
    music_n = ele.xpath('./*/text()')  # //ul/li/*/text()
    print(music_n[0])  # 加了索引之后就只会显示文本了
